liwe.utils.notifier = {};

liwe.utils.notifier.fx = false; 	// Flag T/F. If T fx are used (if present)
// liwe.utils.notifier.fade_in = 50; 	// Flag T/F. If T fx are used (if present)
// liwe.utils.notifier.fade_out = 50; 	// Flag T/F. If T fx are used (if present)
liwe.utils.notifier.scroll_win = true;
liwe.utils.notifier._messages = [];


liwe.utils.notifier.show = function ( text, mode, ms )
{
	if ( ! mode ) mode = liwe.utils.notifier.mode.MESSAGE;

	liwe.utils.notifier._show ( text, mode );
	liwe.utils.notifier._add_message ( text );
	
	if ( ms ) setTimeout ( function () { liwe.utils.notifier.hide (); }, ms );
};

liwe.utils.notifier.hide = function ()
{
	if ( ! liwe.utils.notifier._el || liwe.utils.notifier._el.style.display != 'block' ) return;

	if ( liwe.utils.notifier.fx && liwe.fx && liwe.fx.fade_in )
	
		liwe.fx.fade_out ( liwe.utils.notifier._el, function () { liwe.utils.notifier._el.style.display = "none"; } ); 
	else 
		liwe.utils.notifier._el.style.display = "none";
};

liwe.utils.notifier._add_message = function ( text )
{
	if ( liwe.sound ) liwe.sound.play ( 'system-sound' );
	liwe.utils.notifier._messages.unshift ( text );
	var dest = $ ( 'notifier_destination' );
	if ( ! dest ) return;

	if ( ! liwe.utils.notifier._history )
	{
		liwe.utils.notifier._history = document.createElement ( 'div' );
		liwe.utils.notifier._history.className = 'notifier_history';
		liwe.utils.notifier._history.style.zIndex = liwe.dom.get_highest_zindex () + 1;
		liwe.dom.hide ( liwe.utils.notifier._history );
		liwe.utils.notifier._is_hidden = true;
		document.body.insertBefore ( liwe.utils.notifier._history, document.body.firstChild );
	}

	var l = liwe.utils.notifier._messages.length;
	if ( l == 1 ) // first time
	{
		liwe.events.add ( dest, 'click', liwe.utils.notifier.show_history );
	}
	liwe.dom.add_class ( $( 'notifier_destination' ), 'unread' );
	dest.innerHTML = l;
};

liwe.utils.notifier.show_history = function ()
{
	if ( liwe.utils.notifier._is_hidden )
	{
		liwe.dom.del_class ( $( 'notifier_destination' ), 'unread' );
		liwe.utils.notifier._is_hidden = false;

		liwe.utils.notifier._set_list ();

		if ( liwe.utils.notifier.fx && liwe.fx )
		{
			//liwe.fx.set_opacity ( liwe.utils.notifier._history, 0 );
			liwe.utils.notifier._history.style.display = 'block';
			liwe.fx.fade_in ( liwe.utils.notifier._history );
		} else
			liwe.utils.notifier._history.style.display = 'block';
	} else {
		liwe.utils.notifier._is_hidden = true;

		if ( liwe.utils.notifier.fx && liwe.fx )
			liwe.fx.fade_out ( liwe.utils.notifier._history, function () { liwe.dom.hide ( liwe.utils.notifier._history ); } );
		else
			liwe.dom.hide ( liwe.utils.notifier._history );
	}
};

liwe.utils.notifier._set_list = function ()
{
	var s = new String.buffer ();
	
	s.add ( '<div class="notifier-history-list">' );
	liwe.utils.notifier._messages.iterate ( function ( m )
	{
		s.add ( '<div class="item">' + m + '</div>' );
	} );
	s.add ( '</div>' );

	liwe.utils.notifier._history.innerHTML = s;
};

liwe.utils.notifier.mode = { ALERT : "alert",
			     WARN  : "warn",
			     NOTICE : "notice",
			     MESSAGE : "message",
			     INFO : "info" 
			};

liwe.utils.notifier._el = null;

liwe.utils.notifier._show = function ( txt, mode )
{
	if ( ! liwe.utils.notifier._el )
	{
		liwe.utils.notifier._el = document.createElement ( "div" );
		liwe.utils.notifier._text = document.createElement ( "div" );
		liwe.utils.notifier._close = document.createElement ( "div" );

		liwe.events.add ( liwe.utils.notifier._close, "click", liwe.utils.notifier.hide );
		
		liwe.utils.notifier._el.appendChild ( liwe.utils.notifier._text );
		liwe.utils.notifier._el.appendChild ( liwe.utils.notifier._close );
		
		document.body.insertBefore ( liwe.utils.notifier._el, document.body.firstChild );
	}

	liwe.utils.notifier._el.style.display = "none";
	liwe.utils.notifier._el.className = "liwe_notifier_" + mode;

	liwe.utils.notifier._el.style.zIndex = liwe.dom.get_highest_zindex () + 1;

	liwe.utils.notifier._text.innerHTML = txt;

	liwe.utils.notifier._close.className = "liwe_notifier_close";
	liwe.utils.notifier._close.innerHTML = "<span>Chiudi</span>";

	if ( liwe.utils.notifier.scroll_win ) window.scrollTo ( 0, 0 );

	if ( liwe.utils.notifier.fx && liwe.fx )
	{
		liwe.fx.set_opacity ( liwe.utils.notifier._el, 0 ); 
		liwe.utils.notifier._el.style.display = "block";
		liwe.fx.fade_in ( liwe.utils.notifier._el ); //, 10, liwe.utils.notifier.fade_in ); 
	} else 
		liwe.utils.notifier._el.style.display = "block";
};

